package org.sean.framework.pool;

import java.util.Collection;
import java.util.concurrent.CompletableFuture;
import java.util.function.Supplier;

/**
 * 线程池
 */
public interface Executor {

    /**
     * 执行任务
     *
     * @param task Task
     */
    void execute(Runnable task);


    /**
     * 执行异步任务
     *
     * @param <U>      U
     * @param supplier Task
     * @return Future
     */
    <U> CompletableFuture<U> execute(Supplier<U> supplier);

    /**
     * 多任务执行
     *
     * @param tasks Task
     * @return Future
     */
    CompletableFuture[] execute(Runnable[] tasks);

    /**
     * 多任务执行
     *
     * @param tasks Task
     * @return Future
     */
    CompletableFuture[] execute(Collection<Runnable> tasks);

    /**
     * 顺序执行
     *
     * @param task Task
     */
    void executeOneByOne(Runnable task);

    void shutdown();
}
